import axios from 'axios'
import { ElMessage } from 'element-plus'
import { getToken } from '@/utils/auth'

// 创建axios实例
const service = axios.create({
	baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080', // API的base_url
	timeout: 15000, // 请求超时时间
})

// 请求拦截器
service.interceptors.request.use(
	config => {
		// 如果有token, 将token添加到请求头
		const token = getToken()
		if (token) {
			config.headers['Authorization'] = 'Bearer ' + token
		}
		return config
	},
	error => {
		return Promise.reject(error)
	}
)

// 响应拦截器
service.interceptors.response.use(
	response => {
		const res = response.data

		// 如果返回的数据没有code字段，可能是直接返回了数据
		if (res && typeof res.code === 'undefined') {
			return { code: 200, message: '操作成功', data: res }
		}

		// 如果响应状态码不是200，则视为错误
		if (res.code !== 200) {
			// 登录相关接口，返回原始响应，让登录页面自己处理错误提示
			if (response.config.url.includes('/login')) {
				return res
			}

			// 如果是认证错误，可能需要处理登出逻辑
			if (res.code === 401) {
				// 可以在这里处理登出逻辑
				ElMessage.error('认证失败，请重新登录')
			} else {
				ElMessage.error(res.message || '服务器响应错误')
			}

			return Promise.reject(new Error(res.message || '服务器响应错误'))
		} else {
			return res
		}
	},
	error => {
		// 特殊处理登录接口错误
		if (
			error.config &&
			error.config.url &&
			error.config.url.includes('/login')
		) {
			return Promise.reject(error)
		}

		if (error.response) {
			// 尝试显示后端返回的错误信息
			if (error.response.data && error.response.data.message) {
				ElMessage.error(error.response.data.message)
			} else {
				ElMessage.error(`请求失败: ${error.response.status}`)
			}
		} else if (error.request) {
			ElMessage.error('服务器无响应，请检查网络连接')
		} else {
			ElMessage.error(`请求错误: ${error.message}`)
		}

		return Promise.reject(error)
	}
)

export default service
